from win10toast import ToastNotifier

import requests  # 导入用于发送HTTP请求的库
from bs4 import BeautifulSoup  # 导入用于解析HTML的库
import csv  # 导入用于处理CSV文件的库
import os  # 导入用于进行操作系统相关操作的库
 
# 定义函数 get_html，用于获取网页内容
def get_html(url, time=10):
    try:
        # 发送HTTP GET请求
        re = requests.get(url, timeout=time)
        # 设置编码
        re.encoding = re.apparent_encoding
        # 如果请求返回状态码不是200，抛出异常
        re.raise_for_status()
        return re.text  # 返回网页内容
    except Exception as error:
        print(error)  # 输出错误信息
 
# 定义函数 parser，用于解析HTML内容并提取数据
def parser(html):
    soup = BeautifulSoup(html, "lxml")  # 使用BeautifulSoup解析HTML
    out_list = []  # 初始化存储结果的列表
    # 遍历所有符合条件的元素
    for row in soup.select(".quote"):
        text = row.select_one(".text").get_text(strip=True)  # 提取名言文本
        author = row.select_one(".author").get_text(strip=True)  # 提取作者名字
        out_list.append([text, author])  # 将结果添加到列表
    return out_list  # 返回结果列表
 
# 定义函数 save_csv，用于将数据保存到CSV文件中
def save_csv(item, path):
    directory = os.path.dirname(path)  # 获取文件目录路径
    if not os.path.exists(directory):  # 如果目录不存在
        os.makedirs(directory)  # 创建目录
 
    # 以追加模式（a+）打开CSV文件
    with open(path, 'a+', newline='', encoding='utf-8') as f:
        csv_write = csv.writer(f)  # 创建CSV写入对象
        csv_write.writerows(item)  # 写入数据
 
# 主程序
if __name__ == "__main__":
    # 遍历前10页
    out_list = []
    for i in range(1, 11):
        url = "http://quotes.toscrape.com/page/{0}/".format(i)  # 构造URL
        html = get_html(url)  # 获取HTML内容
        out_list = parser(html)  # 解析HTML并提取数据
        save_csv(out_list, "data/名人名言.csv")  # 保存数据到CSV文件
 
    print("名人名言已保存到:data/名人名言.csv")  # 输出提示信息


    to = ToastNotifier()
    for i in range(10000):
        to.show_toast(msg=out_list[i%len(out_list)][0], duration=10, icon_path="uuus.ico")